package com.chen.controller;

import com.chen.pojo.common.PageResult;
import com.chen.pojo.dto.NodeDto;
import com.chen.pojo.vo.DetailVo;
import com.chen.pojo.vo.NodeVo;
import com.chen.pojo.vo.ReportVo;
import com.chen.service.NodeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author chen
 * @version 1.0
 * @create_date 2025/8/17
 * 点位管理
 */
@Slf4j
@RestController
@RequestMapping("/api/vm-service/node")
public class NodeController {
    @Autowired
    private NodeService nodeService;

    /**
     * 分页查询
     *
     * @param pageIndex 起始页
     * @param pageSize  页大小
     * @param name      点位名称
     * @param regionId  区域id
     * @return 查询结果
     */
    @GetMapping("/search")
    public PageResult<NodeVo> searchList(Integer pageIndex, Integer pageSize, String name, String regionId) {
        log.info("开始分页查询，当前页：{}，页面显示条数：{}，查询条件：点位名称-{}，区域id：{}",
                pageIndex, pageSize, name, regionId);
        return nodeService.searchList(pageIndex, pageSize, name, regionId);
    }

    /**
     * 新增点位
     *
     * @param nodeDto 点位信息
     * @return 新增结果
     */
    @PostMapping
    public Boolean addNode(@RequestBody NodeDto nodeDto) {
        log.info("新增点位：{}", nodeDto);
        return nodeService.addNode(nodeDto);
    }

    /**
     * 产线点位详细信息
     *
     * @param nodeId 点位信息
     * @return
     */
    @GetMapping("/vmList/{nodeId}")
    public List<DetailVo> getNodeDetail(@PathVariable String nodeId) {
        log.info("获取点位id：{} 的详细信息", nodeId);
        return nodeService.getNodeDetail(nodeId);
    }

    /**
     * 更新点位信息
     *
     * @param nodeId  点位id
     * @param nodeDto 点位信息
     * @return 更新结果
     */
    @PutMapping("/{nodeId}")
    public Boolean updateNode(@PathVariable String nodeId, @RequestBody NodeDto nodeDto) {
        log.info("更新点位信息，点位id：{}", nodeDto);
        return nodeService.updateNode(nodeId, nodeDto);
    }

    /**
     * 删除点位信息
     *
     * @param nodeId 点位id
     * @return 结果
     */
    @DeleteMapping("/{nodeId}")
    public Boolean deleteNode(@PathVariable String nodeId) {
        log.info("删除点位信息，点位id：{}", nodeId);
        return nodeService.deleteNode(nodeId);
    }

    /**
     * 统计点位数量
     *
     * @return 点位数量
     */
    @GetMapping("/count")
    public Long getNodeCount() {
        return nodeService.getNodeCount();
    }

    /**
     * 合作商点位汇总统计
     *
     * @return 结果
     */
    @GetMapping(" /api/vm-service/node/nodeCollect")
    public List<ReportVo> getNodeCountByPartner() {
        return nodeService.getNodeCountByPartner();
    }
}
